package com.heima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.common.constant.MessageConstant;
import com.heima.common.exception.BaseException;
import com.heima.common.result.PageResult;
import com.heima.common.utils.AliOssUtil;
import com.heima.mapper.SkuMapper;
import com.heima.pojo.dto.SkuDTO;
import com.heima.pojo.entity.Sku;
import com.heima.pojo.entity.SkuClass;
import com.heima.pojo.vo.SkuVO;
import com.heima.pojo.vo.Top10SkuVO;
import com.heima.service.SkuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;

/**
 * \* User: chy
 * \* Date: 2025/8/15  19:36
 * \* Description:
 * \
 */
@Service
@Slf4j
public class SkuServiceImpl implements SkuService {
    @Autowired
    private SkuMapper skuMapper;
    @Autowired
    private AliOssUtil aliOssUtil;

    /**
     * 商品列表
     *
     * @param skuDTO
     * @return
     */
    @Override
    public PageResult<SkuVO> page(SkuDTO skuDTO) {
        //设置分页
        PageHelper.startPage(skuDTO.getPageIndex(), skuDTO.getPageSize());

        //优化版本
        Page<SkuVO> skuVOList = skuMapper.getAllSku(skuDTO);

        return PageResult.<SkuVO>builder()
                .pageIndex(skuDTO.getPageIndex())
                .pageSize(skuDTO.getPageSize())
                .totalPage(skuVOList.size())//总页数
                .totalCount(skuVOList.size())//总记录数
                .currentPageRecords(skuVOList)
                .build();


//        List<Sku> skuList = skuMapper.selectPage(skuDTO);
//
//        if (skuList == null || skuList.isEmpty()) {
//            throw new BaseException(MessageConstant.GOODS_NOT_FOUND);
//        }
//
//        // 提取 classId 并查询分类
//        List<Integer> classIds = skuList.stream()
//                .map(Sku::getClassId)
//                .distinct()//去重
//                .collect(Collectors.toList());
//        //拿到分类
//        List<SkuClass> classList = skuMapper.selectBatchIds(classIds);
//        //根据classId进行分组
//        Map<Integer, SkuClass> classMap = classList.stream()
//                .collect(Collectors.toMap(SkuClass::getClassId, c -> c));
//
//        // 转 VO
//        List<SkuVO> skuVOList = skuList.stream().map(sku -> {
//            SkuVO skuVO = new SkuVO();
//            //分页查询返回商品id是由于是Long类型,前端接口到这个Long类型的数据,
//            // 我是将返回的商品id设置了是string类型,由于BeanUtils工具不能拷贝,需要手动赋值
//            skuVO.setSkuId(String.valueOf(sku.getSkuId()));
//            BeanUtils.copyProperties(sku, skuVO);
//            skuVO.setSkuClass(classMap.get(sku.getClassId()));
//            return skuVO;
//        }).collect(Collectors.toList());
//
//        // 分页信息
//        Page<Sku> page = (Page<Sku>) skuList;
//        long total = page.getTotal();
//        Integer totalCount = (int) total;
//        Integer totalPage = (int) Math.ceil(total / (double) skuDTO.getPageSize());
//
//        //  显式泛型 + builder

//

    }

    /**
     * 新增商品
     *
     * @param sku
     * @return
     */
    @Override
    public void add(Sku sku) {
        sku.setCreateTime(LocalDateTime.now());
        sku.setUpdateTime(LocalDateTime.now());
        sku.setIsDiscount(false);
        skuMapper.insert(sku);
    }

    /**
     * 文件上传
     *
     * @param fileName
     * @return
     */
    @Override
    public String fileUpload(MultipartFile fileName) {

        if (fileName == null || fileName.isEmpty()) {
            return MessageConstant.UPLOAD_FAILED;
        }
        try {
            log.info("上传的文件名为:{}", fileName.getOriginalFilename());
            //1.获取原来文件名
            String oldFileName = fileName.getOriginalFilename();
            //2.截取文件名后缀
            String substring = oldFileName.substring(oldFileName.lastIndexOf("."));
            //3.生成新的文件名
            UUID uuid = UUID.randomUUID();
            String newFileName = uuid.toString() + substring;
            //4.文件的请求路径
            String filePath = aliOssUtil.upload(fileName.getBytes(), newFileName);
            return filePath;
        } catch (IOException e) {
            return MessageConstant.UPLOAD_FAILED;
        }

    }

    /**
     * 修改商品
     *
     * @param sku
     * @return
     */
    @Override
    public void update(Sku sku) {
        skuMapper.update(sku);
    }

    /**
     * 根据商圈id查询top10商品
     *
     * @param businessId
     * @return
     */
    @Override
    public List<Top10SkuVO> businessTop10(String businessId) {

        List<Top10SkuVO> skuList = skuMapper.businessTop10(businessId);
        return skuList;
    }
}
